Bucket-sort
Get the knowledge flowing and circulating! :)
目录
桶排序(英语:Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(
)。 桶排序以下列程序进行:
设置一个定量的数组当作空桶子。
寻访序列,并且把项目一个一个放到对应的桶子去。
对每个不是空的桶子进行排序。
从不是空的桶子里把项目再放回原来的序列中。
——维基百科
【补充笔记】
Definition:Stable sorting algorithm
A sorting algorithm that preserves the order of items with identical key。
INPUT: (1,x), (6,m), (4,k), (5,t), (2,s), (3,b), (1,a), (6,f), (6,b) → 解释:(3, b)中,3是
key
,b是object
Example of stable output:
OUTPUT: (1,x), (1,a), (2,s), (3,b), (4,k), (5,t), (6,m), (6,f), (6,b)
问题:至今似乎我们看到的排序最好的时间复杂度为
,有没有可能还有更好的排序算法呢? 回答:没了。一般来说,
的问题有一个下界,但是在某些情况下, 也是可能的。
Imagine putting 200 student papers in alphabetical order according to the first letter of the last name. An insertion sort (or selection sort, or bubbleSort) would have us try to deal with the whole pile at once. Merge-sort would require spreading out all 200 papers and then comparing and piling them back up again in order.
想象一下,把200名学生的论文按照姓氏的首字母顺序排列。插入排序(或选择排序,或冒泡排序)会让我们尝试一次处理整个堆。归并排序需要将所有200份文件展开,然后再按顺序进行比较和堆积。
Bucket-Sort has us place them into 26 piles by first letter and then stacking those piles together.
桶式排序让我们按照首字母将它们分成26堆,然后将这些摞在一起。
Let be
Bucket-sort uses the keys as indices into an auxiliary array
Phase 1: Empty sequence
Phase 2: For
Analysis:
Phase 1 takes
Phase 2 takes
Bucket-sort takes
Key-type Property(键的类型的性质)
The keys are used as indices into an array and cannot be arbitrary objects
键必须是数组的下标,不能是任意的对象。
No external comparator
没有额外的比较器。
Stable Sort Property(排序的稳定性)
The relative order of any two items with the same key is preserved after the execution of the algorithm
算法执行结束后,任意2个元素的相对顺序不会变化。
Integer keys in the range
如果键是整型数,并且范围在
Put item
把每条记录存放在桶
String keys from a set
如果键是字符串,字符串来自于集合
Sort
把
Put item
把记录